#include "../../../Commons/src/includes/BibliotecasGenerales.h"

#ifndef UTILESCONEXION_H_
#define UTILESCONEXION_H_

typedef struct nodoPedido{
	uint32_t peticion;
	uint32_t flagRW;
	uint32_t lonMsj;
	char mensaje[512];
	struct nodo *ptrSgte;
}nodo_pedido;

typedef nodo_pedido *ptrNodoPedido;

typedef struct clusterRec{
	uint32_t numSector;
	uint8_t contenido[512];
}clusterRec_t;

typedef struct nodoData{
	uint32_t lonMsj;
	char mensaje[516];
	struct nodoData *ptrSgte;
}nodo_data;

typedef nodo_data *ptrNodoData;

typedef struct data{
	uint32_t numSector;
	char mensaje[512];
}data_t;

typedef struct parametros{
	ptrNodoPedido colaFte;
	ptrNodoPedido colaFin;
	ptrNodoPedido colaFteD;
	ptrNodoPedido colaFinD;
	uint32_t socket;
}parametros;

void agregarPedido(ptrNodoPedido *ColaFte,ptrNodoPedido *ColaFin,nodo_pedido valores);
uint32_t suprimirPedido(ptrNodoPedido *ColaFte, ptrNodoPedido *ColaFin);

void agregarData(ptrNodoData *ColaFte,ptrNodoData *ColaFin,nodo_data valores);
uint32_t suprimirData(ptrNodoData *ColaFte, ptrNodoData *ColaFin);

uint32_t noHayPeticiones (ptrNodoPedido ColaFte);

void tomarPedido(parametros* parametros);

void mostrarListaPedidos (ptrNodoPedido ColaFte);
void mostrarListaDatos (ptrNodoData ColaFte);

void pedirLectura(uint32_t socket, uint32_t numSector, char buf[512]);
void pedirEscritura(uint32_t socket, uint32_t numSector, char buf[512]);

uint8_t* pedirLecturaCluster(uint32_t primerSector);
void pedirEscrituraCluster(uint32_t primerSector, uint8_t *contCluster);

#endif /* UTILESCONEXION_H_ */
